#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H

#include <QWidget>
#include <QScrollArea>
#include <QPaintEvent>
#include <QPushButton>
#include <QLabel>


/**********************************
 * Item类型
 *********************************/

enum ItemType
{
    SessionItemType,
    FriendItemType,
    ApplyItemType
};

/**********************************
 * 整个滚动区域的实现
 *********************************/

class sessionFriendArea : public QScrollArea
{
    Q_OBJECT
public:
    explicit sessionFriendArea(QWidget *parent = nullptr);

    // 清空该区域中所有的 item
    void clear();

    void addItem(ItemType type,const QString& id, const QIcon& avatar, const QString& name, const QString& text = "");

private:
    // 后续往 container 内部的 layout 中添加元素, 就能够触发 QScrollArea 滚动效果.
    QWidget* container;

signals:
};

/**********************************
 * 滚动区域中的 Item 的实现
 *********************************/

class sessionFriendItem : public QWidget
{
    Q_OBJECT

public:
    sessionFriendItem(QWidget* owner,const QIcon &avatar,const QString& name,const QString& text = "");

    // 让样式生效
    void paintEvent(QPaintEvent* event) override;
    // 鼠标点击事件
    void mousePressEvent(QMouseEvent* event) override;
    // 鼠标进入事件
    void enterEvent(QEnterEvent* event) override;
    // 鼠标离开事件
    void leaveEvent(QEvent* event) override;

    void select();

    virtual void activity();
private:
    QWidget* owner;
    bool selected = false;      // 标识有没有被选中
protected:
    QLabel* messageLabel;   // 单独设置为成员变量好申请好友item修改
};

/**********************************
 * 会话item
 *********************************/

class sessionItem : public sessionFriendItem
{
    Q_OBJECT
public:
    sessionItem(QWidget* owner,const QString& chatSessionId,const QIcon &avatar,const QString& name,const QString& lastmsg);

    void activity() override;

private:
    QString sessionId;

    // 最后一条消息的文本预览
    QString text;
};

/**********************************
 * 好友item
 *********************************/

class friendItem : public sessionFriendItem
{
    Q_OBJECT
public:
    friendItem(QWidget* owner,const QString& friendId,const QIcon &avatar,const QString& name,const QString& desc);

    void activity() override;

private:
    QString friendId;

    QString description;
};

/**********************************
 * 好友申请item
 *********************************/

class applyItem : public sessionFriendItem
{
    Q_OBJECT
public:
    applyItem(QWidget* owner,const QString& applyId,const QIcon &avatar,const QString& name);

    void activity() override;

private:
    QString applyId;

    // 接受和拒绝按钮
    QPushButton* acceptBtn;
    QPushButton* rejectBtn;
};

#endif // SESSIONFRIENDAREA_H
